package com.applurk.plugin;
import org.apache.cordova.CordovaWebView;
import org.apache.cordova.CallbackContext;
import org.apache.cordova.CordovaPlugin;
import org.apache.cordova.CordovaInterface;
import android.app.admin.DevicePolicyManager;
import android.content.Context;
import android.os.PowerManager;
import android.util.Log;
import android.provider.Settings;
import android.widget.Toast;
import android.view.Window;
import android.view.WindowManager;
import android.view.WindowManager.LayoutParams;
import android.app.KeyguardManager;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
public class ScreenLocker extends CordovaPlugin {
public static final String TAG = "ScreenLocker";
public static final String ACTION_UNLOCK = "unlock";
public static final String ACTION_LOCK = "lock";
public static PowerManager powerManager;
public static PowerManager.WakeLock wakeLock;
/**
* Constructor.
*/
public ScreenLocker() {
}
/**
* Sets the context of the Command. This can then be used to do things like
* get file paths associated with the Activity.
*
* @param cordova The context of the main Activity.
* @param webView The CordovaWebView Cordova is running in.
*/
public void initialize(CordovaInterface cordova, CordovaWebView webView) {
super.initialize(cordova, webView);
powerManager = (PowerManager) cordova.getActivity().getSystemService(Context.POWER_SERVICE);
wakeLock = powerManager.newWakeLock((PowerManager.FULL_WAKE_LOCK | PowerManager.ACQUIRE_CAUSES_WAKEUP | PowerManager.ON_AFTER_RELEASE), "TAG");
Log.v(TAG, "Init ScreenLocker");
}
@Override
public boolean execute(final String action, JSONArray args, final CallbackContext callbackContext) throws JSONException {
boolean result = false;
Log.v(TAG, "ScreenLocker received:" + action);
try {
if (ACTION_LOCK.equals(action)) {
cordova.getActivity().runOnUiThread(new Runnable() {
@Override
public void run() {
Window window = cordova.getActivity().getWindow();
window.clearFlags(WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED);
window.clearFlags(WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD);
window.clearFlags(WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON);
if(wakeLock.isHeld()) {
wakeLock.release();
}
Log.v(TAG, "ScreenLocker received SUCCESS:" + action);
callbackContext.success();
}
});
result = true;
} else if (ACTION_UNLOCK.equals(action)) {
Log.v(TAG, "ScreenLocker received ACTION_UNLOCK");
JSONObject arg_object = args.getJSONObject(0);
final int acquireTime = arg_object.getInt("timeout");
cordova.getActivity().runOnUiThread(new Runnable() {
@Override
public void run() {
Window window = cordova.getActivity().getWindow();
window.addFlags(WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED);
window.addFlags(WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD);
window.addFlags(WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON);
if(wakeLock.isHeld()) {
wakeLock.release();
}
if(acquireTime > 0) {
wakeLock.acquire(acquireTime);
}
else
{
wakeLock.acquire();
}
Log.v(TAG, "ScreenLocker received SUCCESS:" + action);
callbackContext.success();
}
});
result = true;
} else {
callbackContext.error("Invalid action");
result = false;
}
} catch (Exception e) {
System.err.println("Exception: " + e.getMessage());
callbackContext.error(e.getMessage());
result = false;
}
return result;
}
}